手动向fabric通道中添加组织Org3

您所在的位置:网站首页 fabric 组织 手动向fabric通道中添加组织Org3

手动向fabric通道中添加组织Org3

2024-06-12 16:06| 来源: 网络整理| 查看: 265

向fabric网络通道中添加组织Org3

(1)使用密钥生成器cryptogen产生Org3的加密材料

Cryptogen generate –config=./org3-crypto.yaml

(2)使用交易配置工具configtxgen生成Org3对应的配置材料

export FABRIC_CFG_PATH=$PWD (用来告诉configtxgen 去哪儿找configtx.yaml 文件)

Configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json

(3)拷贝排序节点的 MSP 材料到 Org3 的 crypto-config 目录下

Cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/

(4)更新通道配置,首先设置ORDERER_CA和CHANNEL_NAME变量

export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

export CHANNEL_NAME=mychannel

(5)获取通道mychannel最新的配置区块

Peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA

(6)用configtxlator将通道配置解码为JSON格式,裁剪所有的头部、元数据、创建者签名等

configtxlator proto_decode –input config_block.pb –type common.Block | jq .data.data[0].payload.data.config > config.json

(7)使用jq工具追加Org3的配置定义org3.json,生成modified_config.json文件

jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json

CLI容器中目前包含两个json文件config.json(包含Org1和Org2两组织的配置文件)和modified_config.json(包含Org1,Org2,Org3总共3个组织的配置文件)。

(8)将config.json和modified_config.json编码成config.pb和modified_config.pb格式

Configtxlator proto_encode –input config.json –type common.Config –output config.pb

Configtxlator proto_encode –input modified_json –type common.Config –output modified_json.pb

(9)计算两个pb文件的差异,输出新的pb文件,即org3_update.pb

Configtxlator compute_update –channel_id $CHANNEL_NAME –original config.pb –updated modified_config.pb –output org3_update.pb

(10)将org3_update.pb解码成org3_update.json

Configtxlator proto_decode –input org3_update.pb –type common.ConfigUpdate | jq . > org3_update.json

(11)把之前裁剪掉的头部信息还原回来,生成新文件org3_update_in_envelope.json

echo ‘{“payload”:{“header”:{“channel_header”:{“channel_id”:”mychannel”, “type”:2}},”data”:{“config_update”:’$(cat org3_update.json)’}}}’ | jq . > org3_update_in_envelope.json

(12)把org3_update_in_envelope.json转换为pb格式

Configtxlator proto_encode –input org3_update_in_envelope.json –type common.Envelope –output org3_update_in_envelope.pb

(13)分别配置Org1和Org2管理员签名更新org3_update_in_envelope.pb

Peer channel signconfigtx -f org3_update_in_envelope.pb

切换到Org2MSP环境,然后执行

Peer channel signconfigtx -f org3_update_in_envelope.pb

(14)更新channel

Peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 –tls true –cafile $ORDERER_CA

(15)配置领导节点选举(默认设置为动态领导选举)

新加入的节点是根据初始区块启动的,初始区块是不包含通道配置更新中新加入的组织信息 的。因此新的节点无法利用 gossip 协议,因为它们无法验证从自己组织里其他节点发送过 来的区块,除非它们接收到将组织加入到通道的那个配置交易。新加入的节点必须有以下配 置之一才能从排序服务接收区块:

1. 采用静态领导者模式,将节点配置为组织的领导者

CORE_PEER_GOSSIP_USELEADERELECTION=false

CORE_PEER_GOSSIP_ORGLEADER=true

2. 采用动态领导者选举,配置节点采用领导选举的方式:

CORE_PEER_GOSSIP_USELEADERELECTION=true

CORE_PEER_GOSSIP_ORGLEADER=false

(16)将org3加入通道channel-mychannel

1. 打开新的终端启动Org3 docker compose:

Docker-compose -f docker-compose-org3.yaml up -d

2. 导出两个关键变量

export ORDERER_CA=

/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

&& export CHANNEL_NAME=mychannel

3. 向排序服务发送一个获取 mychannel 初始区块的请求。如果通道更新成功执行,排序服务会成功校验这个请求中 Org3 的签名。如果 Org3 没有成功地添加到通 道配置中,排序服务会拒绝这个请求。

Peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c $CHANNEL_NAME –tls –cafile $ORDERER_CA

4. 将peer0将入到通道中

peer channel join -b mychannel.block

切换环境,把peer1加入到channel中

export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls/ca.crt && export CORE_PEER_ADDRESS=peer1.org3.example.com:12051

peer channel join -b mychannel.block

 

(17)升级和调用链码,升级背书策略以加入Org3

在Org3cli安装:peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/

在原始cli安装:peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/

在原始cli升级背书策略:peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')"

在Org3cli中查询链码:peer chaincode query -n mycc -C $CHANNEL_NAME -c '{"Args":["query","a"]}'

在Org3cli中调用链码:peer chaincode invoke -o orderer.example.com:7050  --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3